package productorconsumidorpetri;

public class Consumidor extends Thread
{
    private Monitor monitor;
    /*
    private int [] disparo_consumir =new int [4];
    private int [] disparo_ya_consumi = new int [4];
    */
    private int disparo_consumir = 1;
    private int disparo_ya_consumi = 3;
    private Buffer buffer;
	
    //Constructor
    public Consumidor(Monitor monitor, Buffer buffer)
    {
        this.monitor = monitor;
        this.buffer = buffer;
        /*
        //Se carga el valor del vector que servira para dispara la transicion de Consumir
            disparo_consumir[0] = 1;//Si hay un uno se disparara la transicion Consumir
            disparo_consumir[1] = 0;//Si hay un uno se disparara la transicion Producir
            disparo_consumir[2] = 0;//Si hay un uno se disparara la transicion Ya_Consumi
            disparo_consumir[3] = 0;//Si hay un uno se disparara la transicion Ya_Produci
        
            //Se carga el valor del vector que servira para dispara la transicion de Ya_Consumi
            disparo_ya_consumi[0] = 0;//Si hay un uno se disparara la transicion Consumir
            disparo_ya_consumi[1] = 0;//Si hay un uno se disparara la transicion Producir
            disparo_ya_consumi[2] = 1;//Si hay un uno se disparara la transicion Ya_Consumi
            disparo_ya_consumi[3] = 0;//Si hay un uno se disparara la transicion Ya_Produci
            */	
    }
	
    public void run()
    {	
        System.err.println( getName() + " SOY CONSUMIDOR");
		
        //Cantidad que va a consumir
        for ( int cuenta = 1; cuenta <= 5; cuenta++ ) 
        {
            //Estar inactivo de 0 a 3 segundos
            try 
            {	Thread.sleep( ( int ) ( Math.random() * 30 ) );	}
            catch ( InterruptedException excepcion ) 
            {	excepcion.printStackTrace();	}
		
            //Ejecutar la Red de Petri      
            monitor.ejecutar_transicion(disparo_consumir);
            
          //Estar inactivo de 0 a 3 segundos
            try 
            {	Thread.sleep( ( int ) ( Math.random() * 30 ) );	}
            catch ( InterruptedException excepcion ) 
            {	excepcion.printStackTrace();	}
            
          //Consumir
            int valor = buffer.sacar();
            System.out.println( getName() + " CONSUMI:" + valor);
            
          //Ejecutar la Red de Petri      
            monitor.ejecutar_transicion(disparo_ya_consumi);
            
        }//Fin del bucle for
		
        System.err.println( getName() + " TERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINOTERMINO DE CONSUMIR");
    
    } //Fin del metodo run

   
} //Fin de la clase Consumidor